# 小牛牛超市选品
# 题目内容
牛牛在超市采购商品,每件商品有对应价格(均为正整数)。给定预算 $limit$,要求选出连续一段商品,满足两条约束:
- 这段商品总价格严格大于 $limit$
- 这段商品中最贵商品价格 $\le limit$
请找出满足以上两条规则的最短连续商品长度;不存在合法区间输出 $0$。
约束条件:
- $0 < limit < 100$
- $0 < n \le 10$
- $0 < A_i \le 10$
# 输入描述
- 参数 1:商品数量 $n$
- 参数 2:预算上限 $limit$
- 参数 3:商品价格数组,数组元素代表每件商品价格 $A_i$
# 输出描述
合法最短区间长度;无合法区间输出 $0$。
# 样例
# 样例 1
输入
6 7
2 3 1 2 4 3
1
2
2
输出
3
1
说明:
- $[4,3]$ 的和为 $7$,不满足严格大于 $7$,作废
- $[2,4,3]$ 的和为 $9>7$,最大值 $4 \le 7$,长度 $3$
- $[3,1,2,4]$ 的和为 $10>7$,长度 $4$
最短合法长度为 $3$。
# 样例 2
输入
3 11
1 2 3
1
2
2
输出
0
1
说明: 不满足 $limit$ 约束。
# 代码
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
rl.on('line', (input) => {
const limit = Number(input.split(' ')[1]);
rl.on('line', (input) => {
const arr = input.split(' ').map(v => parseInt(v));
let left = 0;
let right = 0;
let min = Infinity;
function isYes(l, r) {
let res = 0;
for(let i=l; i<=r; i++) {
if (arr[i] > limit) {
return false;
} else {
res += arr[i];
}
}
if (res > limit) {
return true;
} else {
return false;
}
}
while(left <= right && right < arr.length) {
if (isYes(left, right)) {
min = Math.min(min, right-left+1);
// console.log(min, left, right);
left++;
} else {
right++;
}
}
console.log(min === Infinity ? 0 : min);
})
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40